package com.atguigu.gmall.activity.service;

import com.atguigu.gmall.activity.model.UserRecode;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.order.model.OrderInfo;

import java.util.Map;

public interface SeckillBizService {
    /**
     * 为用户秒杀指定商品生成抢购码
     *
     * @param userId
     * @param skuId
     * @return
     */
    String getSeckillSkuIdStr(String userId, Long skuId);

    /**
     * 秒杀入队，将用户秒杀请求放入MQ队列中
     *
     * @param userId
     * @param skuId
     * @param buyCode
     * @return
     */
    void seckillRequest2Queue(String userId, Long skuId, String buyCode);

    /**
     * 处理用户秒杀请求
     *
     * @param userRecode 包含：userId,skuId,num
     */
    void processSeckillRequest(UserRecode userRecode);

    /**
     * 更新秒杀库存
     *
     * @param userRecode
     */
    void processStockDeduct(UserRecode userRecode);

    /**
     * 处理前端定时查询秒杀结果
     *
     * @param skuId
     * @return
     */
    Result checkSeckillStatus(String userId, Long skuId);

    /**
     * 汇总秒杀确认页面相关数据
     *
     * @param userId
     * @param skuId
     * @return
     */
    Map<String, Object> seckillTradeData(String userId, Long skuId);

    /**
     * 提交秒杀订单
     *
     * @param orderInfo
     * @return
     */
    Long submitSeckillOrder(OrderInfo orderInfo);

    /**
     * 清理秒杀缓存
     */
    void processCleanCache();
}
